package com.example.chamberlainserver.security;

/**
 * 角色常量类
 */
public class RoleConstants {
    // 角色常量（带ROLE_前缀，用于Spring Security）
    public static final String ROLE_ADMIN = "ROLE_ADMIN";         // 超级管理员
    public static final String ROLE_TEACHER = "ROLE_TEACHER";     // 辅导员
    public static final String ROLE_BUTLER = "ROLE_BUTLER";       // 小管家角色
    public static final String ROLE_STUDENT = "ROLE_STUDENT";     // 学生
    public static final String ROLE_MINISTER = "ROLE_MINISTER";   // 部长
    public static final String ROLE_MEMBER = "ROLE_MEMBER";       // 部员
    
    // 角色代码常量（不带前缀，用于数据库存储）
    public static final String ADMIN = "ADMIN";           // 超级管理员
    public static final String TEACHER = "TEACHER";       // 辅导员
    public static final String BUTLER = "BUTLER";         // 小管家角色
    public static final String STUDENT = "STUDENT";       // 学生
    public static final String MINISTER = "MINISTER";     // 部长
    public static final String MEMBER = "MEMBER";         // 部员
    public static final String MANAGER = "MANAGER";       // 兼容旧代码，等同于BUTLER
    
    /**
     * 获取带ROLE_前缀的角色名
     * @param role 角色名（不带前缀）
     * @return 带ROLE_前缀的角色名
     */
    public static String getRoleWithPrefix(String role) {
        if (role == null) {
            return ROLE_STUDENT; // 默认为学生角色
        }
        
        // 如果已经带有ROLE_前缀，则直接返回
        if (role.startsWith("ROLE_")) {
            return role;
        }
        
        // 处理特殊情况：MANAGER 映射到 BUTLER
        if ("MANAGER".equals(role)) {
            return ROLE_BUTLER;
        }
        
        return "ROLE_" + role;
    }
    
    /**
     * 获取不带ROLE_前缀的角色名
     * @param roleWithPrefix 带ROLE_前缀的角色名
     * @return 不带ROLE_前缀的角色名
     */
    public static String getRoleWithoutPrefix(String roleWithPrefix) {
        if (roleWithPrefix == null) {
            return STUDENT; // 默认为学生角色
        }
        
        // 如果带有ROLE_前缀，则去除前缀
        if (roleWithPrefix.startsWith("ROLE_")) {
            return roleWithPrefix.substring(5);
        }
        
        return roleWithPrefix;
    }
}